home *** CD-ROM | disk | FTP | other *** search
-
- UNIT Queues; { see test program at the end ! }
-
- INTERFACE
-
- TYPE
- PStrRec = ^TStrQueue;
- TStrQueue = RECORD
- Data : string;
- Next : PStrRec;
- END; (* of RECORD *)
- StrQueue = OBJECT
- Private
- Start, Finish, Temp : PStrRec;
- Public
- CONSTRUCTOR Init;
- PROCEDURE Reset;
- FUNCTION Copy : String;
- FUNCTION AtEnd : boolean;
- PROCEDURE Enqueue (S : string);
- PROCEDURE Dequeue (VAR S : string);
- FUNCTION Empty : boolean;
- DESTRUCTOR Done;
- END; (* of Object StrQueue *)
- pStrQueue = ^StrQueue;
-
- IMPLEMENTATION
-
- CONSTRUCTOR StrQueue.Init;
- BEGIN
- Start := nil;
- Finish := nil;
- Temp := nil;
- END; (* of CONSTRUCTOR StrQueue.Init *)
-
-
-
- PROCEDURE StrQueue.Reset;
- BEGIN
- Temp := Start;
- END; (* of StrQueue.Reset *)
-
-
-
- FUNCTION StrQueue.Copy : String;
- BEGIN
- if Temp <> nil then Copy := Temp^.Data
- else Copy := '';
-
- if Temp <> Finish then Temp := Temp^.Next
- else Temp := nil;
- END; (* of StrQueue.Copy *)
-
-
- FUNCTION StrQueue.AtEnd : boolean;
- BEGIN
- AtEnd := Temp = nil;
- END; (* of StrQueue.AtEnd *)
-
-
-
- PROCEDURE StrQueue.Enqueue (S : string);
- VAR
- T : PStrRec;
-
- BEGIN
- new (T);
- T^.Data := S;
- T^.Next := nil;
-
- IF Start = nil THEN
- Start := T
- ELSE
- Finish^.Next := T;
- Finish := T;
- END; (* of StrQueue.Enqueue *)
-
-
-
- PROCEDURE StrQueue.Dequeue (VAR S : string);
- VAR
- T : PStrRec;
-
- BEGIN
-
- IF Start = nil THEN BEGIN
- S := '';
- exit;
- END; (* of IF *)
-
- S := Start^.Data;
- T := Start^.Next;
- dispose (Start);
- Start := T;
- END; (* of StrQueue.Dequeue *)
-
-
-
- FUNCTION StrQueue.Empty : boolean;
- BEGIN
- Empty := Start = nil;
- END; (* of StrQueue.Empty *)
-
-
-
- DESTRUCTOR StrQueue.Done;
- VAR
- Belch : string;
- BEGIN
- REPEAT
- Dequeue (Belch);
- UNTIL Empty;
- END; (* of Destructor StrQueue.Done *)
-
-
- END. (* of UNIT Queues *)
-
- ---------------
-
- PROGRAM TestStr;
-
- USES Queues,strings;
-
- CONST
- MaxStrLen = $FFF8;
-
- VAR
- ThisString : StrQueue;
- Temp : string;
- blah : pchar;
- theend : pointer;
- T2 : array[0..80] of char;
-
- BEGIN
-
- ThisString.Init;
-
- readln (temp);
- WHILE Temp <> '' DO BEGIN
- ThisString.enqueue (Temp);
- readln (temp);
- END; (* of WHILE *)
-
- getmem (blah, MaxStrLen);
- fillchar (blah^, MaxStrLen, #0);
-
-
- WHILE (NOT ThisString.Empty) and (strlen (blah) < (MaxStrLen - 81)) DO BEGIN
- ThisString.dequeue (Temp);
- StrPCopy (T2, Temp);
- StrLCat (blah, T2, MaxStrLen);
- StrLCat (blah, #13#10, MaxStrLen);
- END; (* of WHILE *)
-
- write (blah);
-
- freemem (blah, MaxStrLen);
-
- readln;
- END.